//
// Created by HP on 2025/11/13.
//

#ifndef FLIGHTSERVER_HEADLER_H
#define FLIGHTSERVER_HEADLER_H

#include "../include/emailSender.h"
#include "../include/database.h"
#include "../include/redis.h"
#include "../include/util.h"
#include "../model/User.h"
#include "../include/jwt.h"
#include "Server.h"
#include "../include/middleware.h"
#include "../model/Train.h"

/**
 * @brief 发送验证邮件的函数声明
 *
 * 该函数用于处理发送验证邮件的请求，接收HTTP请求和响应对象作为参数。
 *
 * @param req HTTP请求对象，包含客户端发送的请求数据
 * @param res HTTP响应对象，用于向客户端返回处理结果
 */
void sendVerificationEmail(const Request& req, Response& res);

void login(const Request& req, Response& res);

/**
 * 注册用户函数
 * @param req HTTP请求对象，包含客户端发送的请求数据
 * @param res HTTP响应对象，用于向客户端返回处理结果
 */
void registerUser(const Request& req, Response& res);

/**
 * 处理单向请求的函数
 * @param req 请求对象，包含客户端发送的请求信息
 * @param res 响应对象，用于向客户端返回处理结果
 */
void handlerQueryOneWay(const Request& req, Response& res);

/**
 * 处理往返查询请求的函数
 * @param req 包含请求信息的引用，用于获取客户端发送的请求数据
 * @param res 包含响应信息的引用，用于向客户端返回处理结果
 */
void handlerQueryRoundTrip(const Request& req, Response& res);

/**
 * 处理转账查询请求的函数
 * @param req 接收到的请求对象，包含查询所需的参数和信息
 * @param res 需要构建的响应对象，用于返回查询结果
 */
void handlerQueryTransfer(const Request& req, Response& res);

/**
 * 处理退款查询请求的函数
 * 该函数接收一个请求对象和一个响应对象，用于处理退款相关的查询操作
 *
 * @param req 包含退款查询所需的请求信息
 * @param res 用于返回查询结果和响应状态
 */
void handlerQueryRefund(const Request& req, Response& res);

/**
 * 处理查询检查点请求的函数
 * @param req 请求对象，包含客户端发送的请求数据
 * @param res 响应对象，用于向客户端返回处理结果
 */
void handlerQueryCheckPoint(const Request& req, Response& res);

/**
 * 处理单向查询请求的函数
 * @param req 请求对象，包含客户端发送的查询请求信息
 * @param res 响应对象，用于向客户端返回处理结果
 */
void handlerQueryOnSale(const Request& req, Response& res);

/**
 * 获取仪表盘统计数据的函数
 * 该函数用于处理获取仪表盘统计数据的请求，并返回相应的响应
 *
 * @param req 接收到的请求对象，包含客户端发送的数据
 * @param res 需要返回的响应对象，用于向客户端发送数据
 */
void getDashBoardStatistics(const Request& req, Response& res);
/**
 * 处理获取票务请求的函数
 * @param req 包含请求信息的对象，可能包含查询参数、用户信息等
 * @param res 用于构建和发送响应的对象，将包含票务信息或错误信息
 */
void getTickets(const Request& req, Response& res);
/**
 * 添加票务的函数
 * @param req 请求对象，包含客户端发送的请求信息
 * @param res 响应对象，用于向客户端返回处理结果
 */
void addTickets(const Request& req, Response& res);
/**
 * 更新票据信息函数
 * @param req 请求对象，包含客户端发送的请求数据
 * @param res 响应对象，用于向客户端返回处理结果
 */
void updateTickets(const Request& req, Response& res);
/**
 * @file 处理各种业务请求的函数声明
 * @brief 这些函数用于处理不同类型的HTTP请求，包括票务、订单、用户和统计相关的操作
 */
/**
 * @brief 删除票务信息
 * @param req HTTP请求对象，包含请求参数
 * @param res HTTP响应对象，用于返回处理结果
 */
void deleteTickets(const Request& req, Response& res);
/**
 * @brief 搜索票务信息
 * @param req HTTP请求对象，包含搜索参数
 * @param res HTTP响应对象，返回搜索结果
 */
void searchTickets(const Request& req, Response& res);
/**
 * @brief 获取订单列表
 * @param req HTTP请求对象，可能包含分页或筛选参数
 * @param res HTTP响应对象，返回订单列表数据
 */
void getOrders(const Request& req, Response& res);
/**
 * @brief 更新订单信息
 * @param req HTTP请求对象，包含要更新的订单数据
 * @param res HTTP响应对象，返回更新结果
 */
void updateOrders(const Request& req, Response& res);
/**
 * @brief 删除订单
 * @param req HTTP请求对象，包含要删除的订单ID
 * @param res HTTP响应对象，返回删除结果
 */
void deleteOrders(const Request& req, Response& res);
/**
 * @brief 搜索用户的订单
 * @param req HTTP请求对象，包含用户ID和搜索条件
 * @param res HTTP响应对象，返回用户的订单列表
 */
void searchUsersOrders(const Request& req, Response& res);
/**
 * @brief 获取订单统计信息
 * @param req HTTP请求对象，可能包含时间范围等参数
 * @param res HTTP响应对象，返回订单统计数据
 */
void getOrdersStatistics(const Request& req, Response& res);
/**
 * @brief 获取用户列表
 * @param req HTTP请求对象，可能包含分页或筛选参数
 * @param res HTTP响应对象，返回用户列表数据
 */
void getUsers(const Request& req, Response& res);
/**
 * @brief 搜索用户
 * @param req HTTP请求对象，包含搜索条件
 * @param res HTTP响应对象，返回符合条件的用户列表
 */
void searchUsers(const Request& req, Response& res);
/**
 * @brief 获取用户统计信息
 * @param req HTTP请求对象，可能包含时间范围等参数
 * @param res HTTP响应对象，返回用户统计数据
 */
void getUsersStatistics(const Request& req, Response& res);
/**
 * @brief 获取用户详细信息
 * @param req HTTP请求对象，包含用户ID
 * @param res HTTP响应对象，返回用户详细信息
 */
void getUsersDetail(const Request& req, Response& res);
/**
 * @brief 冻结用户账户
 * @param req HTTP请求对象，包含要冻结的用户ID
 * @param res HTTP响应对象，返回操作结果
 */
void freezeUser(const Request& req, Response& res);
/**
 * @brief 解冻用户账户
 * @param req HTTP请求对象，包含要解冻的用户ID
 * @param res HTTP响应对象，返回操作结果
 */
void unfreezeUser(const Request& req, Response& res);
/**
 * @brief 获取总体统计信息
 * @param req HTTP请求对象，可能包含时间范围等参数
 * @param res HTTP响应对象，返回总体统计数据
 */
void getStatistics(const Request& req, Response& res);
/**
 * @brief 获取统计详细信息
 * @param req HTTP请求对象，可能包含具体的统计维度
 * @param res HTTP响应对象，返回详细的统计信息
 */
void getStatisticsDetails(const Request& req, Response& res);
/**
 * @brief 获取收入图表数据
 * @param req HTTP请求对象，包含时间范围等参数
 * @param res HTTP响应对象，返回收入图表数据
 */
void getRevenueChart(const Request& req, Response& res);
/**
 * @brief 获取分类图表数据
 * @param req HTTP请求对象，可能包含分类维度等参数
 * @param res HTTP响应对象，返回分类图表数据
 */
void getCategoryChart(const Request& req, Response& res);

/**
 * 获取所有站点信息
 * @param req 请求对象，包含请求参数
 * @param res 响应对象，用于返回处理结果
 */
void getStations(const Request& req, Response& res);

/**
 * 获取站点数量统计
 * @param req 请求对象，包含请求参数
 * @param res 响应对象，用于返回处理结果
 */
void getStationCnts(const Request& req, Response& res);

/**
 * 获取城市列表
 * @param req 请求对象，包含请求参数
 * @param res 响应对象，用于返回处理结果
 */
void getCities(const Request& req, Response& res);

/**
 * 获取城市数量统计
 * @param req 请求对象，包含请求参数
 * @param res 响应对象，用于返回处理结果
 */
void getCitiesCnts(const Request& req, Response& res);

void getIncomeStatistics(const Request& req, Response& res);

void getIncomeSourceAnalysis(const Request& req, Response& res);

void CheckLogin(const Request& req, Response& res);

void getIncomeTrend(const Request& req, Response& res);

void getGameContent(const Request& req, Response& res);

void addGameContent(const Request& req, Response& res);

void deleteGameContent(const Request& req, Response& res);

void updateGameContent(const Request& req, Response& res);

void getAnnouncement(const Request& req, Response& res);

void addAnnouncement(const Request& req, Response& res);

void deleteAnnouncement(const Request& req, Response& res);

void updateAnnouncement(const Request& req, Response& res);

void addTicketsByTrain(const Request& req, Response& res);

void getAccountsPaginated(const Request& req, Response& res);

void addAccount(const Request& req, Response& res);

void updateUser(const Request& req, Response& res);

void deleteUser(const Request& req, Response& res);

void getLogsPaginated(const Request& req, Response& res);

void getAdminType(const Request& req, Response& res);
#endif //FLIGHTSERVER_HEADLER_H
